﻿using FluentNHibernate.Mapping;

namespace ControleRepresentante.Logic.Models.Maps
{
    public class PedidoMap : SubclassMap<Pedido>
    {
        public PedidoMap()
        {
            References(x => x.Cliente)
                .Cascade.None()
                .Not.Nullable();
            Map(x => x.Numero)
                .Generated.Always();
            Map(x => x.CondicaoPagamento)
                .Nullable();
            Map(x => x.Data)
                .Not.Nullable();
            References(x => x.Fabrica)
                .Not.Nullable()
                .Cascade.None();
            Map(x => x.Observacao)
                .Nullable();
            Map(x => x.PrazoEntrega)
                .Nullable();
            Map(x => x.Desconto)
                .Not.Nullable();
            Map(x => x.Faturado)
                .Not.Nullable();
            Map(x => x.Cancelado)
                .Not.Nullable();
            Map(x => x.TotalMercadoria)
                .Not.Nullable();
            Map(x => x.TotalPecas)
                .Not.Nullable();
            Map(x => x.ValorImposto)
                .Not.Nullable();
            Map(x => x.TotalLiquido)
                .Not.Nullable();
            Map(x => x.Created)
                .Not.Nullable();
            Map(x => x.Modified)
                .Not.Nullable();
            HasMany(x => x.Produtos)
                .Inverse()
                .Access.PascalCaseField(Prefix.mUnderscore)
                .Cascade.AllDeleteOrphan();
            References(x => x.Transportadora)
                .Not.Nullable()
                .Cascade.None();
            References(x => x.Vendedor)
                .Not.Nullable()
                .Cascade.None();
            HasMany(x => x.Posts)
                .Inverse()
                .Access.PascalCaseField(Prefix.mUnderscore)
                .Cascade.AllDeleteOrphan();
            HasOne(x => x.PedidoJolitex)
                .Cascade.All();
        }
    }

    public class PedidoJolitexMap : MapBase<PedidoJolitex>
    {
        public PedidoJolitexMap()
        {
            Map(x => x.Sincronizado);
            Map(x => x.Codigo)
                .Nullable();
            HasOne(x => x.Pedido);
        }
    }
}
